/**
 * @Author Fizz Pu
 * @Date 2020/8/25 下午8:43
 * @Version 1.0
 * 失之毫厘，缪之千里！
 */

/**
你总共有 n 枚硬币，你需要将它们摆成一个阶梯形状，第 k 行就必须正好有 k 枚硬币。

        给定一个数字 n，找出可形成完整阶梯行的总行数。

        n 是一个非负整数，并且在32位有符号整型的范围内。

        来源：力扣（LeetCode）
        链接：https://leetcode-cn.com/problems/arranging-coins
        著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

*/

public class Lee441 {
    public static void main(String[] args) {
        Lee441 lee = new Lee441();
        System.out.println(lee.arrangeCoins(5));
        System.out.println(lee.arrangeCoins(8));
        System.out.println(lee.arrangeCoins(10));
        System.out.println(lee.arrangeCoins(0));
        System.out.println(lee.arrangeCoins(1804289383));
        System.out.println(lee.arrangeCoins(2147483647));

    }
    public int arrangeCoins(int n) {
        long x = (long) n;
        double res = Math.sqrt(1+8 * x)-1;
        return (int) res;
        // 牵涉到精度计算，数学的方法舍弃
       // 循环计算
        /*long sums = 0;
        for(int i = 0; i <= n; ++i){
            sums += i;
            if (sums == n)return i;
            else if (sums > n)return i - 1;
        }
        return  -1;*/
        // 二分法
        // 没有弄出来
    }
}
